/*
 * 版权声明 (c) 2025 XXX科技有限公司
 *
 * 本软件及其相关文档文件受版权保护。未经版权所有者明确书面许可，任何单位或个人不得
 * 以任何形式复制、传播、修改、出售、出租、反向工程、反编译或利用本软件的任何部分。
 *
 * 对于任何违反本声明的行为，版权所有者保留追究法律责任的权利。
 */

#ifndef BASE_MODULE_H
#define BASE_MODULE_H

#include "logger.h"

using namespace std;

// 前向声明,防止循环引用
class Context;

class Module {
public:
	explicit Module(Context &context, string module_name) : module_name(move(module_name)), ctx(context) {};
	virtual ~Module() = default;

	// 初始化模块 (纯虚函数,派生类必须实现)
	virtual bool Init() = 0;

	// 启动模块 (非纯虚函数, 可选)
	virtual void Start() {};

	// 停止模块 (非纯虚函数, 可选)
	virtual void Stop() {};

	// 获取模块名称(常量成员函数,承诺不修改类任何成员变量,除非是mutable修饰的变量)
	string ModuleName() const { return module_name; }

protected:
	string module_name; // 模块名称
	Context &ctx;       // 引用上下文
};

#endif // BASE_MODULE_H
